package com.hw.sjms.visitorpattern;

import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * 访问者模式
 */
public class VisitorPattern {


    String path = "/Users/chehongwei/study/project/netty-learing";

    /**
     * 使用访问者模式操作文件
     * 1、创建visit接口，访问文件方法
     * 2、实现接口，重写访问文件方法
     * 3、封装业务类，接收visit接口和文件对象，递归循环执行visit方法
     * 4、扩展：扩展对文件的操作，只需实现visit接口，重写访问文件方法
     */
    @Test
    public void fileTest() {

        File file = new File("/Users/chehongwei/study/project/netty-learing");

        // 单个visit方法
        FileWrapper fileWrapper = new FileWrapper(file);
        fileWrapper.accept(file1 -> {
            System.out.println(file1.getName());
            return Type.STOP;
        });
    }


    /**
     * 扩展功能
     */
    @Test
    public void fileTestTuozhan() {
        File file = new File("/Users/chehongwei/study/project/netty-learing");
        FileWrapper fileWrapper = new FileWrapper(file);
        FileVisit fileVisit = file1 -> {
            System.out.println("打印名称：" + file1.getName());
            return null;
        };

        FileVisit fileVisit1 = file1 -> {
            System.out.println("打印绝对路径：" + file1.getAbsolutePath());
            return null;
        };
        fileWrapper.accept(new FileVisitGroup(new FileVisit[]{fileVisit, fileVisit1}));
    }


}
